//package com.wondertek.poms.service.controller;
//
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.util.StrUtil;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.domain.Page;
//import org.springframework.data.domain.PageImpl;
//import org.springframework.data.domain.PageRequest;
//import org.springframework.data.domain.Pageable;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.web.bind.annotation.*;
//
//import com.wondertek.poms.common.vo.PageBean;
//import com.wondertek.poms.common.vo.ResultBean;
//import com.wondertek.poms.service.util.RedisTemplateHelper;
//import com.wondertek.poms.service.vo.PageVo;
//import com.wondertek.poms.service.vo.RedisInfo;
//import com.wondertek.poms.service.vo.RedisVo;
//
//import java.util.*;
//import java.util.concurrent.TimeUnit;
//
//
///**
// * @author douzi
// */
//@RestController
//@Api("Redis缓存管理接口")
//@RequestMapping("/moms/redis")
//@Transactional
//public class RedisController {
//
//    /**
//     * 最大获取10万个键值
//     */
//    private static final int maxSize = 100000;
//
//    @Autowired
//    private StringRedisTemplate redisTemplate;
//
//    @Autowired
//    private RedisTemplateHelper redisTemplateHelper;
//
//    @RequestMapping(value = "/getAllByPage", method = RequestMethod.GET)
//    @ApiOperation(value = "分页获取全部")
//    public ResultBean getAllByPage(@RequestParam(required = false) String key,
//    		@RequestParam(defaultValue="1") int page,
//			@RequestParam(defaultValue="20") int rows,
//			@RequestParam(defaultValue="UPDATED_TIME") String sidx,
//			@RequestParam(defaultValue="desc") String sord){
//
//        List<RedisVo> list = new ArrayList<>();
//
//        if(StrUtil.isNotBlank(key)){
//            key = "*" + key + "*";
//        }else{
//            key = "*";
//        }
//        Set<String> keys = redisTemplateHelper.keys(key);
//        int size = keys.size();
//        // 限制10万个
//        if(size>maxSize){
//            size = maxSize;
//        }
//        int i = 0;
//        for (String s : keys) {
//            if(i>size){
//                break;
//            }
//            RedisVo redisVo = new RedisVo(s, "", redisTemplate.getExpire(s, TimeUnit.SECONDS));
//            list.add(redisVo);
//            i++;
//        }
//        PageVo pageVo = new PageVo(page, rows, sidx, sord);
//        Pageable pageable = PageRequest.of(page, rows);
//        Page<RedisVo> pages = new PageImpl<RedisVo>(listToPage(pageVo, list), pageable, size);
//        pages.getContent().forEach(e->{
//            String value = "";
//            try {
//                value =  redisTemplate.opsForValue().get(e.getKey());
//                if(value.length()>150){
//                    value = value.substring(0, 150) + "...";
//                }
//            } catch (Exception exception){
//                value = "非字符格式数据";
//            }
//            e.setValue(value);
//        });
//        return PageBean.ok(pages.getTotalPages(), pages.getTotalElements(), pages.getContent());
//    }
//    
//    /**
//     * List 手动分页
//     * @param page
//     * @param list
//     * @return
//     */
//    public static List<RedisVo> listToPage(PageVo page, List<RedisVo> list) {
//        int pageNumber = page.getPageNumber() - 1;
//        int pageSize = page.getPageSize();
//
//        if(pageNumber<0){
//            pageNumber = 0;
//        }
//        if(pageSize<1){
//            pageSize = 10;
//        }
//        if(pageSize>100){
//            pageSize = 100;
//        }
//
//        int fromIndex = pageNumber * pageSize;
//        int toIndex = pageNumber * pageSize + pageSize;
//
//        if(fromIndex > list.size()){
//            return new ArrayList<RedisVo>();
//        } else if(toIndex >= list.size()) {
//            return list.subList(fromIndex, list.size());
//        } else {
//            return list.subList(fromIndex, toIndex);
//        }
//    }
//
//    @RequestMapping(value = "/getByKey/{key}", method = RequestMethod.GET)
//    @ApiOperation(value = "通过key获取")
//    public ResultBean getByKey(@PathVariable String key){
//
//        Map<String, Object> map = new HashMap<>();
//        String value = redisTemplate.opsForValue().get(key);
//        Long expireTime = redisTemplate.getExpire(key, TimeUnit.SECONDS);
//        map.put("value", value);
//        map.put("expireTime", expireTime);
//        return ResultBean.ok(map);
//    }
//
//    @RequestMapping(value = "/save", method = RequestMethod.POST)
//    @ApiOperation(value = "添加或编辑")
//    public ResultBean save(@RequestParam String key,
//                               @RequestParam String value,
//                               @RequestParam Long expireTime){
//
//        if(expireTime<0){
//            redisTemplate.opsForValue().set(key ,value);
//        }else if(expireTime>0){
//            redisTemplate.opsForValue().set(key ,value, expireTime, TimeUnit.SECONDS);
//        }
//        return ResultBean.ok("保存成功");
//    }
//
//    @RequestMapping(value = "/delByKeys", method = RequestMethod.POST)
//    @ApiOperation(value = "批量删除")
//    public ResultBean delByKeys(@RequestParam String[] keys){
//
//        for(String key : keys){
//            redisTemplate.delete(key);
//        }
//        return ResultBean.ok("删除成功");
//    }
//
//    @RequestMapping(value = "/delAll", method = RequestMethod.POST)
//    @ApiOperation(value = "全部删除")
//    public ResultBean delAll(){
//
//        redisTemplate.delete(redisTemplateHelper.keys("*"));
//        return ResultBean.ok("删除成功");
//    }
//
//    @RequestMapping(value = "/getKeySize", method = RequestMethod.GET)
//    @ApiOperation(value = "获取实时key大小")
//    public ResultBean getKeySize(){
//
//        Map<String, Object> map = new HashMap<>(16);
//        map.put("keySize", redisTemplate.getConnectionFactory().getConnection().dbSize());
//        map.put("time", DateUtil.format(new Date(), "HH:mm:ss"));
//        return ResultBean.ok(map);
//    }
//
//    @RequestMapping(value = "/getMemory", method = RequestMethod.GET)
//    @ApiOperation(value = "获取实时内存大小")
//    public ResultBean getMemory(){
//
//        Map<String, Object> map = new HashMap<>(16);
//        Properties memory = redisTemplate.getConnectionFactory().getConnection().info("memory");
//        map.put("memory", memory.get("used_memory"));
//        map.put("time", DateUtil.format(new Date(), "HH:mm:ss"));
//        return ResultBean.ok(map);
//    }
//
//    @RequestMapping(value = "/info", method = RequestMethod.GET)
//    @ApiOperation(value = "获取Redis信息")
//    public ResultBean info(){
//
//        List<RedisInfo> infoList = new ArrayList<>();
//        Properties properties = redisTemplate.getConnectionFactory().getConnection().info();
//        Set<Object> keys = properties.keySet();
//        for(Object key : keys){
//            String value = properties.get(key).toString();
//            RedisInfo redisInfo = new RedisInfo();
//            redisInfo.setKey(key.toString());
//            redisInfo.setValue(value);
//            infoList.add(redisInfo);
//        }
//        return ResultBean.ok(infoList);
//    }
//}
